package com.cskaoyan.javase._1extends._5protected.one;

/**
 * protected访问权限:
 * 总的来说,用的不多,但是对于面向对象的体系设计来说,它是非常重要的一个访问权限.
 *
 * 四种访问级别:
 *      1.private,私有的,仅在当前类内部访问
 *      2.缺省的,默认的,包私有的访问权限,什么关键字都不写
 *          仅在当前包下访问
 *      3.protected,受保护的访问权限,
 *          不同包下的子类可以访问
 *      4.public,公共的访问权限,不同包下也能任意访问
 *
 * protected访问权限:
 *      1.同包下任意访问,无论如何创建对象,都能够访问
 *      2.不同包下,如果不是子类,不管采取何种方式,一定无法访问
 *      3.不同包下的子类去访问父类的受保护成员，只有一种方式：
 *      创建子类自身对象，然后访问子类自身从父类当中继承过来的受保护成员
 *
 * 以上，总结，对于某个受保护成员的访问问题：
 *      1.首先观察访问的位置和定义的位置，是否同包，如果同包，可以随意访问。
 *      2.如果不同包，先看这个类是不是子类，如果不是子类，肯定没法访问，一定访问不到
 *      3.如果是不同包下的子类，就一定要创建这个子类自身对象，然后访问子类自身从父类继承过来的受保护成员
 *
 * 补充:
 * protected访问权限是专门给继承设计的,在不同包下时,就能够保证
 * 子类对自己继承过来的受保护成员的最大控制权限
 * 别人用不了你的,你也用不了别人的
 *
 * 所以protected访问权限,使用它时,普遍用来修饰成员变量/方法.
 * 不要用它修饰静态成员
 *
 * @since 10:56
 * @author wuguidong@cskaoyan.onaliyun.com
 */
// 当前类
public class CurrentClazz {
    // 在当前类之中,存在一个受保护的访问权限成员变量
    protected int num = 666;

    // protected static int num2  = 777;

    public void test(){
        System.out.println(num);
    }

    public static void tetStatic(){
        CurrentClazz cc = new CurrentClazz();
        System.out.println(cc.num);
    }
}
